#!/bin/bash
#Auteur : Mav
#Contact : maveryck@jabber-fr.org
#Version : 06/01/08

DEBUG=0 # Attention, ne pas oublier de modifier !!!
DIR=$(pwd)
LOG_CAIRO_DOCK=$DIR/log.txt
LOG_CAIRO_GLITZ=$DIR/log_glitz.txt
SCRIPT_CAIRO_WITH_GLITZ=$DIR/script_cairo_dock_with_glitz.sh
SCRIPT="cairo-dock_svn.sh"
SCRIPT_SAVE="cairo-dock_svn.sh.save"
SCRIPT_NEW="cairo-dock_svn.sh.new"
HOST="http://cairo-dock.vef.fr"
LIBCAIRO="cairo-1.4.14"
GLITZ="glitz-0.5.6"
PIXMAN="pixman-0.9.6"


PLUGINS="clock dustbin gnome-integration logout rhythmbox rendering terminal systray powermanager shortcuts Xgamma"
PLUGINS_TO_INSTALL=""
NEEDED="subversion libtool build-essential automake1.9 autoconf m4 autotools-dev pkg-config libtool libcairo2-dev libgtk2.0-dev librsvg2-dev libglitz1-dev libcairo2 librsvg2-2 libglitz1 libglitz-glx1 libglitz-glx1-dev libdbus-glib-1-dev libgnomevfs2-dev libgnomeui-dev zenity intltool gettext libvte-dev"

UPDATE=0
UPDATE_PLUG_INS=0
UPDATE_CAIRO_DOCK=0
ALREADY_LOGUED=0
CAIRO_GLITZ_OK=0
HTTP_TYPE="http"


NORMAL="\\033[0;39m"
BLEU="\\033[1;34m"
VERT="\\033[1;32m" 
ROUGE="\\033[1;31m"

install_cairo_dock() {
	if [ $ALREADY_LOGUED -ne 1 ]; then
		if [ -f $LOG_CAIRO_DOCK ]; then		
			rm -R $LOG_CAIRO_DOCK > /dev/null
			ALREADY_LOGUED=1
			echo "Installation de cairo-dock du `date`" > $LOG_CAIRO_DOCK	
		fi
	fi
	
	echo "" >> $LOG_CAIRO_DOCK
	echo -e "$BLEU""Installation de cairo-dock"
	
	install_cairo >> $LOG_CAIRO_DOCK 2>&1
	echo -e "$VERT""Effectuée"
	echo -e "$NORMAL"

}


install_cairo_dock_plugins() {
	echo -e "$BLEU""Installation du plug-in $1"
	if [ $ALREADY_LOGUED -ne 1 ]; then
		if [ -f $LOG_CAIRO_DOCK ]; then		
			rm -R $LOG_CAIRO_DOCK > /dev/null
			ALREADY_LOGUED=1
			echo "Installation de cairo-dock du `date`" > $LOG_CAIRO_DOCK	
		fi
	else
		echo "Installation du plugin" $1 "du `date`" >> $LOG_CAIRO_DOCK
		echo ""
	fi
	install_plugins $1 >> $LOG_CAIRO_DOCK 2>&1
	echo -e "$VERT""Effectuée"
	echo -e "$NORMAL"

}


install_cairo() {
	cd $DIR/cairo-dock
	autoreconf -isvf && ./configure --prefix=/usr $OPTIONS && make clean all
	sudo make install
	cd ..
}

install_plugins() {
	cd $DIR/plug-ins
	cd $1
	autoreconf -isvf && ./configure --prefix=/usr $OPTIONS && make clean all
	sudo make install
	cd ..
				
}

install_cairo_with_glitz() {
	cd $DIR
	export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
	export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
	install_glitz > $LOG_CAIRO_GLITZ 2>&1
	
}

install_glitz() {
	wget $HOST/$GLITZ.tar.gz 
	wget $HOST/$PIXMAN.tar.gz 
	wget $HOST/$LIBCAIRO.tar.gz
		
	cd $DIR && tar xzvf $PIXMAN.tar.gz && rm -Rf $PIXMAN.tar.gz && cd $PIXMAN	
	./configure --prefix=/usr/local && make
	sudo make install
	
	cd $DIR && tar xzvf $GLITZ.tar.gz && rm -Rf $GLITZ.tar.gz && cd $GLITZ
	./configure --prefix=/usr/local && make
	sudo make install
	
	cd $DIR && tar xzvf $LIBCAIRO.tar.gz && rm -Rf $LIBCAIRO.tar.gz && cd $LIBCAIRO
	./configure --prefix=/usr/local --enable-glitz && make
	sudo make install

	cd $DIR
}

check() {
	echo -e "$NORMAL""Vérification de l'intégrité de l'installation"
	sleep 1
	egrep -i "( error| Erreur)" $1
	if [ $? -eq 0 ]; then
		echo -e "$ROUGE"
		echo "Des erreurs ont été détéctées lors de l'installation."
		echo "Celà peut ne pas occasionner de problèmes."
		test "$1" == $LOG_CAIRO_GLITZ
		if [ $? -eq 0 ]; then
			echo "L'installation de Cairo avec l'option Glitz activée n'a pas abouti. Veuillez consultez le fichier log_glitz_NOK.txt pour plus de détails"
			mv $LOG_CAIRO_GLITZ $DIR/log_glitz_NOK.txt
		else
			echo "Veuillez consulter le fichier log.txt pour plus d'informations"
			echo -e "$NORMAL"
		fi
		exit
	else
		echo -e "$VERT"
		echo "L'installation s'est terminée correctement."
		echo -e "$NORMAL"

		test "$1" == $LOG_CAIRO_GLITZ
		if [ $? -eq 0 ]; then
			create_launch_script
			sleep 3
			exit
		fi
		
	fi
     	

	
}

#check_new_script() {
#	cp $SCRIPT $SCRIPT_SAVE #pour moi :)
#	echo -e "$NORMAL"""
#	echo "Vérification de la disponibilité d'un nouveau script"
#	wget $HOST/$SCRIPT -q -O $SCRIPT_NEW	
#	diff $SCRIPT $SCRIPT_NEW >/dev/null
	if [ $? -eq 1 ]; then
		echo -e "$ROUGE"		
		echo "Veuillez relancer le script, une mise à jour a été téléchargée"
		echo -e "$NORMAL"
		mv $SCRIPT_NEW $SCRIPT
		sudo chmod u+x $SCRIPT
		zenity --info --title=Cairo-Dock --text="Cliquez sur Ok pour fermer le terminal."
		exit 1
	else
		echo ""
		echo -e "$VERT""Vous possédez la dernière version du script de M@v"
	fi
	echo -e "$NORMAL"
	rm $SCRIPT_NEW

}

create_launch_script() {
	echo "Creation d'un script permettant le lancement de Cairo-dock avec Glitz"
	echo "export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}" > $SCRIPT_CAIRO_WITH_GLITZ
	echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}" >> $SCRIPT_CAIRO_WITH_GLITZ
	echo "cairo-dock --glitz" >> $SCRIPT_CAIRO_WITH_GLITZ
	sudo chmod u+x $SCRIPT_CAIRO_WITH_GLITZ
	echo -e "$ROUGE""Veuillez utilisez ce script pour executer Cairo-dock :" $SCRIPT_CAIRO_WITH_GLITZ
}


uninstall() {
	cd $DIR/cairo-dock
	sudo make uninstall
	cd ..

	for plugins in $PLUGINS
	do
		cd $DIR/plug-ins
		cd $plugins
		sudo make uninstall
		cd ..
	done

}



if [ $DEBUG -ne 1 ]; then
	check_new_script
fi



test "$1" == "--help"
if [ $? -eq 0 ]
then
        echo "Usage :"
        echo "$0          				Mettre à jour votre version de Cairo-Dock" # Pour mettre à jour le SVN et installer cairo-dock
        echo "$0 --force-install        		Réinstaller Cairo-Dock" #Si vous avez effectué des modifications dans le SVN par vous-même et souhaitez installer cairo-dock
	echo "$0 --enable-glitz         		Mettre à jour votre version et installer Cairo-Dock avec l'option GLITZ activée "
	echo "$0 --force-install --enable-glitz         Réinstaller Cairo-Dock avec l'option GLITZ activée "
	echo "$0 --https          			Récupérer cairo-dock en https "
	echo "$0 --uninstall          			Désinstaller Cairo-Dock "
	echo "$0 --help          			Afficher ce menu d'aide "
	echo ""
	echo "Auteur : Mav"
	echo "Contact : mav@vef.fr"
        exit
fi


test "$1" == "--force-install"
if [ $? -eq 0 ]; then
	test "$2" == "--enable-glitz"
		if [ $? -eq 0 ]; then
		OPTIONS="--enable-glitz"
	fi
     
	install_cairo_dock

	for plugins in $PLUGINS
	do
		install_cairo_dock_plugins $plugins
	done	
	check $LOG_CAIRO_DOCK
	
fi

test "$1" == "--enable-glitz"
if [ $? -eq 0 ]; then
	OPTIONS="--enable-glitz"
fi

test "$1" == "--uninstall"
if [ $? -eq 0 ]; then
	echo "Désinstallation de Cairo-Dock et des plug-ins"	
	uninstall > $LOG_CAIRO_DOCK 2>&1
	echo "La désinstallation à été effectuée."
	echo ""
	echo "Cependant, votre dossier de configuration est toujours présent."
	echo "Celui-ci se trouve dans votre /home et se nomme .cairo-dock (attention c'est un dossier caché)."
	echo "Vous pouvez le supprimer une fois la désinstallation effectuée"
	zenity --info --title=Cairo-Dock --text="Cairo-Dock a été désinstallé, veuillez lire le message dans le terminal"	
	exit
	
fi 

test "$1" == "--https"
if [ $? -eq 0 ]; then
	HTTP_TYPE="https"
fi


echo -e "$BLEU""Vérification des paquets nécéssaires à la compilation" 

for tested in $NEEDED
do
	dpkg -s $tested |grep installed |grep "install ok" > /dev/null	
	if [ $? -eq 1 ]; then
		echo -e "$ROUGE""Le paquet $tested n'est pas installé""$NORMAL"""
		sudo apt-get install $tested
		
	fi
done
echo ""
echo -e "$VERT""Vérification OK""$NORMAL"""


if [ -d $DIR ]; then
	echo ""
else
	mkdir -p $DIR
fi

cd $DIR

if [ -d $DIR/cairo-dock ]; then
	if [ -d $DIR/plug-ins ]; then
		 echo "" > /dev/null
	fi
else
	UPDATE=2
fi


if [ ! -f $LOG_CAIRO_GLITZ ]; then
	echo ""
	echo -e "$BLEU""Vous allez installer cairo-dock avec l'option Glitz d'activée"
	echo -e "$ROUGE""Cette option permet une plus grande réactivité de votre dock en utilisant votre carte graphique et non votre processeur pour effectuer les calculs mais peut ralentir votre système ou occasionner des dysfonctionnements"
	echo -e "$ROUGE""Des erreurs semblent apparaitre avec les cartes ATI"
	echo -e "$ROUGE""Etes-vous sûr de vouloir continuer ? (y/n)"
	read answer_cairo_dock_glitz

	test "$answer_cairo_dock_glitz" == "y"
	if [ $? -eq 0 ]; then
		echo ""
		echo -e "$ROUGE""Attention ! Pour celà, la librairie Cairo doit avoir été compilée avec Glitz. Voulez-vous effectuer cette opération ? (y/n)"
		read answer_cairo_glitz
		test "$answer_cairo_glitz" == "y"
		if [ $? -eq 0 ]; then
			OPTIONS="--enable-glitz"
			echo -e "$NORMAL"""
			echo -e "$BLEU""Installation de la librairie Cairo avec l'option --glitz"
			echo -e "$ROUGE""Attention ! Cette opération peut durer quelques minutes"
			install_cairo_with_glitz
			echo -e "$VERT""Effectué"
			echo -e "$NORMAL"""
			check $LOG_CAIRO_GLITZ
			echo -e "$NORMAL"""
			echo -e "$BLEU""Recompilation de Cairo-Dock avec Glitz"
			echo -e "$NORMAL"""	
			#Attention le pb est là, on recompile alors qu'on a pas vérifié si on avait dl
			install_cairo_dock

			for plugins in $PLUGINS
			do
				install_cairo_dock_plugins $plugins
			done	
			check $LOG_CAIRO_DOCK	
		fi	
	fi

else
	OPTIONS="--enable-glitz"
	echo -e "$VERT""Cairo a déjà été compilé avec Glitz"
	echo -e "$NORMAL"""
fi

if [ $UPDATE -ne 2 ]; then

	echo -e "$BLEU""Recherche des mises à jour pour cairo-dock"
	echo -e "$NORMAL"
	svn update cairo-dock | egrep -i "(Actualis|rest|Upda)" && UPDATE_CAIRO_DOCK=1 || UPDATE_CAIRO_DOCK=0
	
	if [ $UPDATE_CAIRO_DOCK -eq 1 ]; then
		echo -e "$VERT""Une mise à jour de cairo-dock a été détéctée"
		echo -e "$NORMAL"
		sleep 1

		install_cairo_dock

		UPDATE=1
	fi


	for plugins in $PLUGINS
	do
		if [ -d $DIR/plug-ins/$plugins ]; then		
			echo -e "$BLEU""Recherche des mises à jour pour" $plugins
			echo -e "$NORMAL"
			cd $DIR
			svn update plug-ins/$plugins | egrep -i "(Actualis|rest|Upda)" && UPDATE_PLUG_INS=1 || UPDATE_PLUG_INS=0

			if [ $UPDATE_PLUG_INS -eq 1 ]; then
				echo -e "$VERT""Une mise à jour du plugin $plugins a été détéctée"
				sleep 1
				echo -e "$NORMAL"
				install_cairo_dock_plugins $plugins
				UPDATE=1
			fi
		else
			echo -e "$BLEU""Téléchargement du nouveau plugin" $plugins
			cd $DIR/plug-ins
			svn checkout $HTTP_TYPE://svn.berlios.de/svnroot/repos/cairo-dock/trunk/plug-ins/$plugins
			sleep 1
			echo -e "$NORMAL"
			install_cairo_dock_plugins $plugins
			UPDATE=1
		fi
			
	done



	if [ $UPDATE_CAIRO_DOCK -eq 1 ]; then
	echo -e "$VERT""Recompilation des plug-ins suite à la mise à jour de cairo-dock"
		for plugins in $PLUGINS
		do
			install_cairo_dock_plugins $plugins
		done
	fi
	
fi


if [ $UPDATE -eq 0 ]; then
	echo -e "$BLEU"
	echo "Pas de mise à jour disponible"
	echo -e "$NORMAL"
#	zenity --info --title=Cairo-Dock --text="Cliquez sur Ok pour fermer le terminal."
	exit
fi





if [ $UPDATE -eq 2 ]; then
	echo -e "$BLEU"
	echo "C'est la première fois que vous installez le SVN de Cairo-Dock"
	echo ""
	echo "Téléchargement des données. Ceci peut prendre quelques minutes"
	echo -e "$NORMAL"
	sleep 2

	svn checkout $HTTP_TYPE://svn.berlios.de/svnroot/repos/cairo-dock/trunk/cairo-dock
	svn checkout $HTTP_TYPE://svn.berlios.de/svnroot/repos/cairo-dock/trunk/plug-ins/

	echo ""
	echo -e "$BLEU""Données téléchargées. L'installation va débuter"
	echo "Cette opération peut prendre plusieurs minutes et ralentir votre système"
	echo -e "$NORMAL"

	sleep 5
	
	install_cairo_dock
	
	for plugins in $PLUGINS
	do
		install_cairo_dock_plugins $plugins
	done

	check $LOG_CAIRO_DOCK
		
fi


if [ $UPDATE -eq 1 ]; then	
	check $LOG_CAIRO_DOCK
fi


